#!/usr/bin/env Python
#-*-utf-8-*-
#author:zby
#TODO：单位转换器，面向对象版本


class Transfer:
    def __init__(self):
        '初始化函数，这个无作用'
        self.menu = {
        'T':'温度转换',
        'L':'长度转换',
        'C':'货币转换'
        }
        self.is_again = False
        self.choose = ''
        self.trans = None
    
    def welcome(self):
        '欢迎函数'
        print('欢迎使用万能单位转换器')

    def input_method(self):
        '输入函数'
        self.welcome()
        self.choose = input('请选择转换类型')
        if self.choose == 'T':
            self.trans = Ttrans()
        elif self.choose == 'L':
            self.trans = Ltrans()
        elif self.choose == 'C':
            self.trans = Ctrans()
        else:
            print('请重新输入转换类型')

    def continue_or_quit(self):
        '是否要继续执行,y为继续，其余为退出'
        self.is_again = (input('是否要继续？(y)')=='y')

    def start(self):
        'Transfer类的开始函数，一般直接调用即可'
        self.is_again = True
        while(self.is_again):
            self.input_method()
            self.trans.input_method()
            self.continue_or_quit()
            
class Ttrans:
    def __init__(self):
        self.temp = ''

    def input_method(self):
        '温度转换的输入函数' 
        self.temp = input('请输入温度（示例：1C或1F）')
        if self.temp.endswith('C'): # 判断是否以C结尾，如果是返回True
            while not self.temp.strip('C').isnumeric():
                print('输入格式有误,请重试') 
                self.temp = input("请输入温度（示例：1C或1F）")
            self.temp = float(self.temp.strip('C')) # 去掉两头的C，链式写法，之后将str转换成float
            self.C2F()
        elif self.temp.endswith('F'):
            while not self.temp.strip('F').isnumeric():
                print('输入格式有误,请重试')
                self.temp = input('请输入温度（示例：1C或1F）：') 
            self.temp = float(self.temp.strip('F'))
            self.F2C()
        else:
            print('格式有误，示例：1C或1F')
    
    def C2F(self):
        '摄氏温度转华氏温度' 
        Tf = (9/5) * self.temp + 32
        print(f'Tf = (9/5)*{self.temp}+32 = %.3fF'%Tf)

    def F2C(self):
        '华氏温度转摄氏温度'
        Tc = (5/9) * (self.temp-32)
        print(f'Tc = (5/9)*({self.temp}-32) = %.3fC' %Tc)

class Ltrans:
    def __init__(self):
        '长度转换类的初始化函数'
        self.temp = ''

    def input_method(self):
        '长度转换类的初始化函数'
        self.temp = input('请输入长度（示例：1ft或1m）')
        if self.temp.endswith('ft'): # 判断是否以ft结尾，如果是返回True
            while not self.temp.strip('ft').isnumeric():
                print('输入格式有误,请重试')
                self.temp = input('请输入长度（示例：1ft或1m）：')
            self.temp = float(self.temp.strip('ft')) # 去掉两头的ft，链式写法，之后将str转换成float
            self.ft2m()
        elif self.temp.endswith('m'):
            while not self.temp.strip('m').isnumeric():
                print('输入格式有误,请重试')
                self.temp = input('请输入长度（示例：1ft或1m）：')
            self.temp = float(self.temp.strip('m'))
            self.m2ft()   
        else:
            print('格式有误，示例：1m或1ft')
    
    def ft2m(self):
        '英尺转换米'
        longth = 0.3058 * self.temp 
        print(f'%.3f m= 0.3058 * {self.temp}ft'%longth)

    def m2ft(self):
        '米转换英尺'
        longth = self.temp / 0.3058
        print(f'%.3f ft= {self.temp}/0.3058  m'%longth)
        
class Ctrans:
    def __init__(self):
        '货币转换类的初始化函数'
        self.temp = ''
    def input_method(self):
        '货币转换的输入函数'
        self.temp = input('请输入数额（示例：1￥或1$）：')
        if self.temp.endswith('$'): #  判断是否以$结尾，如果是返回True
            while not self.temp.strip('$').isnumeric():
                print('输入格式有误,请重试')
                self.temp = input('请输入数额（示例：1￥或1$）：')
            self.temp = float(self.temp.strip('$')) # 去掉两头的$，链式写法，之后将str转换成float
            self.dollar2renminbi()
        elif self.temp.endswith('￥'):
            while not self.temp.strip('￥').isnumeric():
                print('输入格式有误,请重试')
                self.temp = input('请输入数额（示例：1￥或1$）：')
            self.temp = float(self.temp.strip('￥'))
            self.renminbi2dollar()
        else:
            print('格式有误，示例：1$或1￥')

    def dollar2renminbi(self):
        '美元变人民币'
        money = 7.0203 * self.temp 
        print(f'%.3f= 7.0203 * {self.temp}'%money)

    def renminbi2dollar(self):
        '人民币变美元'
        money =  self.temp / 7.0203
        print(f'%.3f = {self.temp} / 7.0203'%money)


def __main__():
    t = Transfer()
    t.start()

if __name__ == "__main__":
    __main__()
